#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define ll long long
#define N 3000
#define db double
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int n,m,u,v,t;
int a[N],b[N],c[310][310];
db p[N],f[N][N][2];
bool cnt(ll x,ll y){return x>y;}
int main()
{
    scanf("%d%d%d%d",&n,&m,&v,&t);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)  scanf("%d",&b[i]);
    for(int i=1;i<=n;i++)  scanf("%lf",&p[i]);
    memset(c,63,sizeof(c));
    for(int i=1;i<=t;i++) 
    {
        int x,y,z;scanf("%d%d%d",&x,&y,&z);
        c[x][y]=min(c[x][y],z);c[y][x]=c[x][y];
    }
    for(int i=1;i<=v;i++) c[i][i]=0;
    for(int k=1;k<=v;k++)
        for(int i=1;i<=v;i++)
            for(int j=1;j<=v;j++) c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
    memset(f,127,sizeof(f));
    f[1][0][0]=f[1][1][1]=0;
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<=min(m,i);j++)
        {
            db jy1=c[b[i-1]][b[i]],jy2=c[a[i-1]][b[i]];
            db jy3=c[b[i-1]][a[i]],jy4=c[a[i-1]][a[i]];
            f[i][j][0]=min(f[i][j][0],f[i-1][j][0]+jy4);
            f[i][j+1][1]=min(f[i][j+1][1],f[i-1][j][0]+jy2*p[i]+jy4*(1-p[i]));
            if(!j) continue;
            f[i][j][0]=min(f[i][j][0],f[i-1][j][1]+p[i-1]*jy3+(1-p[i-1])*jy4);
            f[i][j+1][1]=min(f[i][j+1][1],f[i-1][j][1]+p[i-1]*p[i]*jy1+p[i-1]*(1-p[i])*jy3+(1-p[i-1])*p[i]*jy2+(1-p[i-1])*(1-p[i])*jy4);
        }
    }
    db ans=f[n][0][0];
    for(int j=1;j<=m;j++) ans=min(ans,min(f[n][j][0],f[n][j][1]));
    printf("%.2lf\n",ans);
    return 0;
}
